package com.treetao.union.web.controller.mall;

import java.util.List;
import java.util.Map;

import javax.servlet.ServletRequest;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.util.WebUtils;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.treetao.union.db.model.MallPCata;
import com.treetao.union.db.model.MallPSku;
import com.treetao.union.db.model.MallPSpu;
import com.treetao.union.db.model.vo.LayerData;
import com.treetao.union.db.model.vo.RestResponse;
import com.treetao.union.db.service.MallPCataService;
import com.treetao.union.db.service.MallPSpuService;
import com.treetao.union.web.constant.Constants;
import com.treetao.union.web.controller.BaseController;

/**
 * <p>
 * 货品信息 前端控制器
 * </p>
 *
 * @author Dev.M
 * @since 2020-04-11
 */
@Controller
@RequestMapping(Constants.AMIND_PREFIX + "/mall-pspu")
public class MallPSpuController extends BaseController {

	@Autowired
	private MallPSpuService mallPSpuService;
	@Autowired
	private MallPCataService mallPCataService;

	@GetMapping("list")
	public String list() {
		return "/admin/mall-pspu/list";
	}

	@PostMapping("list")
	@ResponseBody
	public LayerData<MallPSpu> list(@RequestParam(value = "page", defaultValue = "1") Integer page,
			@RequestParam(value = "limit", defaultValue = "10") Integer limit, ServletRequest request) {
		Map map = WebUtils.getParametersStartingWith(request, "s_");
		LayerData<MallPSpu> layerData = new LayerData<>();
		QueryWrapper<MallPSpu> wrapper = new QueryWrapper<MallPSpu>();
		if (!map.isEmpty()) {
			String delFlag = (String) map.get("delFlag");
			if (StringUtils.isNotBlank(delFlag)) {
				wrapper.eq("del_flag", Boolean.valueOf(delFlag));
			} else {
				map.remove("del_flag");
			}
			String name = (String) map.get("name");
			if (StringUtils.isNotBlank(name)) {
				wrapper.like("name", name);
			} else {
				map.remove("name");
			}

			String spuno = (String) map.get("spuno");
			if (StringUtils.isNotBlank(spuno)) {
				wrapper.like("spuno", spuno);
			} else {
				map.remove("spuno");
			}

		}

		IPage<MallPSpu> pageData = mallPSpuService.page(new Page<>(page, limit), wrapper);
		layerData.setData(pageData.getRecords());
		layerData.setCount(pageData.getTotal());
		return layerData;
	}

	@GetMapping("add")
	public String add() {
		return "/admin/mall-pspu/add";
	}

	@PostMapping("add")
	@ResponseBody
	public RestResponse add(MallPSpu mallPSpu) {
		if (mallPSpu.getRefTwocataId() == null) {
			return RestResponse.failure("分类不能为空");
		}
		if (StringUtils.isBlank(mallPSpu.getName())) {
			return RestResponse.failure("名称不能为空");
		}
		if (StringUtils.isBlank(mallPSpu.getSpuno())) {
			return RestResponse.failure("spu编号不能为空");
		}

		QueryWrapper<MallPSpu> q = getQueryWrapperNoDel();
		q.eq("spuno", mallPSpu.getSpuno());
		int count = mallPSpuService.count(q);
		if (count > 0) {
			return RestResponse.failure("SPU编号重复");
		}

		if (mallPSpu.getRefOnecataId() != null && mallPSpu.getRefTwocataId() != null) {
			MallPCata cataone = mallPCataService.getById(mallPSpu.getRefOnecataId());
			MallPCata catatwo = mallPCataService.getById(mallPSpu.getRefTwocataId());
			if (cataone != null && catatwo != null) {
				mallPSpu.setCataname(cataone.getName() + " / " + catatwo.getName());
			}
		}

		mallPSpuService.save(mallPSpu);
		return RestResponse.success();
	}

	@GetMapping("detail")
	public String detail(Long id, Model model) {
		MallPSpu mallPSpu = mallPSpuService.getById(id);
		model.addAttribute("mallPSpu", mallPSpu);
		return "/admin/mall-pspu/detail";
	}

	@GetMapping("edit")
	public String edit(Long id, Model model) {
		MallPSpu mallPSpu = mallPSpuService.getById(id);
		model.addAttribute("mallPSpu", mallPSpu);
		return "/admin/mall-pspu/edit";
	}

	@PostMapping("edit")
	@ResponseBody
	public RestResponse edit(MallPSpu mallPSpu) {
		if (null == mallPSpu.getId() || 0 == mallPSpu.getId()) {
			return RestResponse.failure("ID不能为空");
		}
		if (mallPSpu.getRefTwocataId() == null) {
			return RestResponse.failure("分类不能为空");
		}
		if (StringUtils.isBlank(mallPSpu.getName())) {
			return RestResponse.failure("名称不能为空");
		}
		if (StringUtils.isBlank(mallPSpu.getSpuno())) {
			return RestResponse.failure("spu编号不能为空");
		}
		MallPSpu sku = mallPSpuService.getById(mallPSpu.getId());
		if (sku != null) {
			if (!sku.getSpuno().equals(mallPSpu.getSpuno())) {
				QueryWrapper<MallPSpu> q = getQueryWrapperNoDel();
				q.eq("spuno", mallPSpu.getSpuno());
				int count = mallPSpuService.count(q);
				if (count > 0) {
					return RestResponse.failure("SPU编号重复");
				}
			}
		}

		if (mallPSpu.getRefOnecataId() != null && mallPSpu.getRefTwocataId() != null) {
			MallPCata cataone = mallPCataService.getById(mallPSpu.getRefOnecataId());
			MallPCata catatwo = mallPCataService.getById(mallPSpu.getRefTwocataId());
			if (cataone != null && catatwo != null) {
				mallPSpu.setCataname(cataone.getName() + " / " + catatwo.getName());
			}
		}
		mallPSpuService.updateById(mallPSpu);
		return RestResponse.success();
	}

	@PostMapping("batchDel")
	@ResponseBody
	public RestResponse batchDel(@RequestParam(value = "ids[]", required = false) List<Long> ids) {
		if (null == ids || ids.size() == 0) {
			return RestResponse.failure("请选择一项");
		}
		return RestResponse.success().setDataOnlyResult(mallPSpuService.removeByIds(ids));
	}

	@PostMapping("delete")
	@ResponseBody
	public RestResponse delete(@RequestParam(value = "id", required = false) Long id) {
		if (null == id || 0 == id) {
			return RestResponse.failure("ID不能为空");
		}
		return RestResponse.success().setDataOnlyResult(mallPSpuService.removeById(id));
	}

	@PostMapping("change-status")
	@ResponseBody
	public RestResponse change_status(@RequestParam(value = "id", required = true) Long id,
			@RequestParam(value = "status", required = false) Boolean status) {
		MallPSpu mallPSpu = mallPSpuService.getById(id);
		mallPSpu.setDelFlag(status);
		mallPSpuService.updateById(mallPSpu);
		return RestResponse.success();
	}

}